package namespace

import (
	"context"
	"kms-backend/config"
	"kms-backend/controllers"
	"kms-backend/utils/logs"

	"github.com/gin-gonic/gin"
	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// 更新操作主要是更新namespace的 labels 和 annotations
// 更新操作时Update方法中需要传入一个*v1.Namespace的指针对象，这个对象内容是前端传入的数据
// 所以函数BasicInit中需要加入一个参数，这个参数是interface{}类型，即不仅能接收namespace对象，
// 也可以接收其他比如deployment、statefulset等类型
func Update(r *gin.Context) {
	logs.Debug(nil, "更新命名空间")
	var namespace corev1.Namespace

	returnData := config.ReturnData{}
	// 生成clientSet, 基础数据basicInfo
	clientSet, basicInfo, err := controllers.BasicInit(r, &namespace)
	if err != nil {
		returnData.Message = err.Error()
		returnData.Status = 400
		r.JSON(200, returnData)
		return
	}

	// 操作资源
	_, err = clientSet.CoreV1().Namespaces().Update(context.TODO(), &namespace, metav1.UpdateOptions{})
	if err != nil {
		msg := "命名空间更新失败" + err.Error()
		logs.Error(nil, "集群"+basicInfo.ClusterId+msg)
		returnData.Message = msg
		returnData.Status = 400
	} else {
		msg := "更新namespace成功"
		logs.Info(nil, "集群"+basicInfo.ClusterId+"中命名空间"+namespace.Name+"更新成功")
		returnData.Message = msg
		returnData.Status = 200
	}
	r.JSON(200, returnData)
}
